package com.nirvana.admin.service;

import com.nirvana.admin.entity.vo.AuthInfoResponseVO;
import com.nirvana.admin.entity.vo.AuthMenuResponseVO;
import com.nirvana.admin.entity.vo.AuthRequestVO;
import com.nirvana.admin.entity.vo.LoginUser;
import org.springframework.security.core.userdetails.UserDetailsService;

import java.util.List;

/**
 * 认证服务：Security 框架 Auth Service 接口，定义 security 组件需要的功能
 *
 * @author zhangshuaiyin
 * @date 2021-09-29 14:34
 */
public interface AuthService extends UserDetailsService {
    /**
     * 登陆用户
     *
     * @param requestVO 登陆信息
     * @param userIp    用户 IP
     * @param userAgent 用户 UA
     * @return 身份令牌，使用 JWT 方式
     */
    String login(AuthRequestVO requestVO, String userIp, String userAgent);

    /**
     * 校验 token 的有效性，并获取用户信息
     * 通过后，刷新 token 的过期时间
     *
     * @param token token
     * @return 用户信息
     */
    LoginUser verifyTokenAndRefresh(String token);

    /**
     * 基于 token 退出登录
     *
     * @param token token
     */
    void logout(String token);

    /**
     * 获取当前登录用户的权限信息
     *
     * @return 权限信息
     */
    AuthInfoResponseVO getPermissionInfo();

    /**
     * 获取当前登录用户的菜单树信息
     *
     * @return 菜单树
     */
    List<AuthMenuResponseVO> getRouters();
}
